home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #47 (Aug 89) / PREC Code / About.p next >
Text File  |  1989-06-14  |  7KB  |  177 lines

  1. unit About;
  2.  
  3. {File name:  About.p  }
  4. {Function: Handle a dialog}
  5. {History: 6/10/89 Original by Prototyper.   }
  6. {                       }
  7.  
  8.  
  9. interface
  10.  
  11.  
  12.  
  13.     procedure D_About;
  14.  
  15. implementation
  16.  
  17.     const                               {These are the item numbers for controls in the Dialog}
  18.         I_OK = 1;
  19.         I_x = 2;
  20.         I_Icon6 = 3;
  21.     var
  22.         ExitDialog: boolean;           {Flag used to exit the Dialog}
  23.         DoubleClick: boolean;          {Flag to say that a double click on a list happened}
  24.         MyPt: Point;                   {Current list selection point}
  25.         MyErr: OSErr;                  {OS error returned}
  26.  
  27. {===========================================================}
  28.  
  29.     function MyFilter (theDialog: DialogPtr; var theEvent: EventRecord; var itemHit: integer): boolean;
  30.         var
  31.             tempRect: Rect;
  32.  
  33.     begin
  34.         MyFilter := FALSE;
  35.         if (theEvent.what = MouseDown) then{Only do on a mouse click}
  36.             begin
  37.                 MyPt := theEvent.where;{Get the point where the mouse was clicked}
  38.                 GlobalToLocal(MyPt);        {Convert global to local}
  39.  
  40.  
  41.             end;
  42.     end;
  43.  
  44. {===========================================================}
  45.  
  46.  
  47.     procedure D_About;
  48.         var
  49.             GetSelection: DialogPtr;{Pointer to this dialog}
  50.             tempRect: Rect;            {Temporary rectangle}
  51.             DType: Integer;            {Type of dialog item}
  52.             Index: Integer;            {For looping}
  53.             DItem: Handle;             {Handle to the dialog item}
  54.             CItem, CTempItem: controlhandle;{Control handle}
  55.             sTemp: Str255;             {Get text entered, temp holding}
  56.             itemHit: Integer;          {Get selection}
  57.             temp: Integer;             {Get selection, temp holding}
  58.             dataBounds: Rect;          {Rect to setup the list}
  59.             cSize: Point;              {Pointer to a cell in a list}
  60.             Icon_Handle: Handle;       {Temp handle to read an Icon into}
  61.             NewMouse: Point;           {Mouse location during tracking Icon presses}
  62.             InIcon: boolean;           {Flag to say pressed in an Icon}
  63.             ThisEditText: TEHandle; {Handle to get the Dialogs TE record}
  64.             TheDialogPtr: DialogPeek;{Pointer to Dialogs definition record, contains the TE record}
  65.  
  66.     {This is an update routine for non-controls in the dialog}
  67.     {This is executed after the dialog is uncovered by an alert}
  68.         procedure Refresh_Dialog;           {Refresh the dialogs non-controls}
  69.             var
  70.                 rTempRect: Rect;             {Temp rectangle used for drawing}
  71.  
  72.         begin
  73.             SetPort(GetSelection);      {Point to our dialog window}
  74.             GetDItem(GetSelection, I_OK, DType, DItem, tempRect);{Get the item handle}
  75.             PenSize(3, 3);              {Change pen to draw thick default outline}
  76.             InsetRect(tempRect, -4, -4);{Draw outside the button by 1 pixel}
  77.             FrameRoundRect(tempRect, 16, 16); {Draw the outline}
  78.             PenSize(1, 1);              {Restore the pen size to the default value}
  79.  
  80.         end;
  81.  
  82.  
  83.     begin                           {Start of dialog handler}
  84.         GetSelection := GetNewDialog(2, nil, Pointer(-1));{Bring in the dialog resource}
  85.         ShowWindow(GetSelection);{Open a dialog box}
  86.         SelectWindow(GetSelection);{Lets see it}
  87.         SetPort(GetSelection);      {Prepare to add conditional text}
  88.  
  89.         TheDialogPtr := DialogPeek(GetSelection);{Get to the inner record}
  90.         ThisEditText := TheDialogPtr^.textH;{Get to the TE record}
  91.         HLock(Handle(ThisEditText));{Lock it for safety}
  92.         ThisEditText^^.txSize := 12;{TE Point size}
  93.         TextSize(12);               {Window Point size}
  94.         ThisEditText^^.txFont := systemFont;{TE Font ID}
  95.         TextFont(systemFont);       {Window Font ID}
  96.         ThisEditText^^.txFont := 0;{TE Font ID}
  97.         ThisEditText^^.fontAscent := 12;{Font ascent}
  98.         ThisEditText^^.lineHeight := 12 + 3 + 1;{Font ascent + descent + leading}
  99.         HUnLock(Handle(ThisEditText));{UnLock the handle when done}
  100.  
  101.  
  102.             {Setup initial conditions}
  103.         Refresh_Dialog;             {Draw any Lists, popups, lines, or rectangles}
  104.  
  105.         ExitDialog := FALSE;          {Do not exit dialog handle loop yet}
  106.  
  107.         repeat                      {Start of dialog handle loop}
  108.             ModalDialog(nil, itemHit);{Wait until an item is hit}
  109.             GetDItem(GetSelection, itemHit, DType, DItem, tempRect);{Get item information}
  110.             CItem := Pointer(DItem);{Get the control handle}
  111.  
  112.                 {Handle it real time}
  113.             if (ItemHit = I_OK) then{Handle the Button being pressed}
  114.                 begin
  115.                     {?? Code to handle this button goes here}
  116.                     ExitDialog := TRUE;{Exit the dialog when this selection is made}
  117.                     Refresh_Dialog;
  118.                 end;                {End for this item selected}
  119.  
  120.             if (ItemHit = I_Icon6) then{Handle the Icon}
  121.                 begin
  122.                     Icon_Handle := GetIcon(10032);{Get Hilighted Icon into memory}
  123.                     if (Icon_Handle <> nil) then{Only do if we got the resource OK}
  124.                         begin           {Get ready to plot the hilighted icon}
  125.                             EraseRect(tempRect);{Erase the original icon}
  126.                             PlotIcon(tempRect, Icon_Handle);{Draw the hilighted icon}
  127.                         end;            {End of drawing hilighted icon}
  128.                     InIcon := TRUE;{Flag as mouse in the Icon}
  129.                     repeat              {Start of mouse tracking routine}
  130.                         GetMouse(NewMouse);{Get latest mouse position}
  131.                         if (PtInRect(NewMouse, tempRect)) then{See if still over the Icon}
  132.                             begin       {...yes, over the Icon}
  133.                                 if not (InIcon) then{See if mouse was out of Icon}
  134.                                     begin{...yes, so it is unhilighted}
  135.                                         Icon_Handle := GetIcon(10032);{Get Hilighted Icon into memory}
  136.                                         if (Icon_Handle <> nil) then{Only do if we have a hilighted Icon}
  137.                                             begin{...yes, have hilighted Icon}
  138.                                                 EraseRect(tempRect);{Erase the unhilighted icon}
  139.                                                 PlotIcon(tempRect, Icon_Handle);{Draw the hilighted icon}
  140.                                             end;{End of Draw the hilighted icon}
  141.                                         InIcon := TRUE;{Flag that we drew the hilighted icon}
  142.                                     end;{}
  143.                             end         {}
  144.                         else if InIcon then{Then draw unhilighted Icon}
  145.                             begin       {Start drawing unhilighted Icon}
  146.                                 Icon_Handle := GetIcon(32);{Get standard Icon into memory}
  147.                                 if (Icon_Handle <> nil) then{Only do if we have the Icon}
  148.                                     begin{...yes, have hilighted Icon}
  149.                                         EraseRect(tempRect);{Erase the hilighted icon}
  150.                                         PlotIcon(tempRect, Icon_Handle);{Draw the standard icon}
  151.                                     end;{End of Draw the icon}
  152.                                 InIcon := FALSE;{Flag as showing the unhilighted icon}
  153.                             end;        {}
  154.                     until not (StillDown);{Loop till mouse button is released}
  155.                                         {}
  156.                     if (PtInRect(NewMouse, tempRect)) then{See if released in the Icon}
  157.                         begin           {...yes, released in the Icon}
  158.                             Refresh_Dialog; {Refresh anything now uncovered}
  159.                         end;            {End of released in the Icon}
  160.                     Icon_Handle := GetIcon(32);{Get standard Icon into memory}
  161.                     if (Icon_Handle <> nil) then{Only do if we have the Icon}
  162.                         begin           {...yes, have hilighted Icon}
  163.                             EraseRect(tempRect);{Erase the hilighted icon}
  164.                             PlotIcon(tempRect, Icon_Handle);{Draw the standard icon}
  165.                         end;            {End of Draw the icon}
  166.                 end;                {End for this item selected}
  167.  
  168.  
  169.         until ExitDialog;           {Handle dialog items until exit selected}
  170.  
  171.             {Get results after dialog}
  172.  
  173.         DisposDialog(GetSelection);{Flush the dialog out of memory}
  174.  
  175.     end;                            {End of procedure}
  176.  
  177. end.                                {End of unit}